import axios from "axios";
import router from "@/router/index";
import { EncryptSM4, DecryptSM4 } from "@/utils/allSM";
import { ZgtToast } from "@/components/zgt-comps";

// 创建axios实例
const service = axios.create({
  // baseURL: 'http://localhost:8017/Gouzbt21to23Test_Api', // api的base_url
  // baseURL: 'http://221.7.197.135:8017/Gouzbt21to23Test_Api', // api的base_url
  baseURL: 'http://221.7.197.135:8017/Gouzbt21to23Formal_Api', // api的base_url
  // baseURL: 'http://192.168.0.23:8099', // api的base_url
  // timeout: 10000, // 请求超时时间
});

// request拦截器
service.interceptors.request.use(
  (config) => {
    // 如果登录了，有token，则请求携带token
    config.headers["mau"] = EncryptSM4("zgt"); //每个请求必须携带
    // }
    if (config.params && config.url == "/zgt/api/getUser") {
      config.params.token = EncryptSM4(config.params.token);
    }
    return config;
  },
  (error) => {
    // Do something with request error
    console.log(error); // for debug
    Promise.reject(error);
  }
);

// respone拦截器
service.interceptors.response.use(
  // response => response,
  /**
   * 下面的注释为通过response自定义code来标示请求状态，当code返回如下情况为权限有问题，登出并返回到登录页
   * 如通过xmlhttprequest 状态码标识 逻辑可写在下面error中
   */
  (response) => {
    if (typeof response.data === "object") {
      if (response.data.StatusCode == "410") {
        ZgtToast.fail(response.data.Info);
        return '';
      }
    }

    let res = {};
    if (typeof response.data === "string") {
      res = DecryptSM4(response.data)
    } else {
      res = response.data
    }
    
    console.log('接口返回:', res);

    // 处理异常的情况
    if (response.status == 200) {
      if (res.code == 200) {
        if (res.data?.errCode == "-2001") {
          ZgtToast.fail(res.data.errMsg);
          if (router.currentRoute.path != '/403') {
            router.push('/403')
          }
          return Promise.reject(res)
        } else {
          return Promise.resolve(res)
        }
      } else if (res.code == 406) {
        ZgtToast.fail(res.msg);
        return Promise.reject(res)
      } else if (res.code === 403 || res.code === 401) {
        if (router.currentRoute.path != '/403') {
          router.push('/403')
        }
        return 
      } else {
        console.log("err" + res);
        return Promise.reject(res)
      }
    }

    if (res.code !== 200) {
      // 403:非法的token; 50012:其他客户端登录了;  401:Token 过期了;
      if (res.code === 403 || res.code === 50012 || res.code === 401) {
        router.push("/403");
      }
      console.log("err" + res);
      // return Promise.reject('error')
    } else {
      // 默认只返回data，不返回状态码和message
      // 通过 meta 中的 responseAll 配置来取决后台是否返回所有数据(包括状态码，message和data)
      const isbackAll =
        response.config.meta && response.config.meta.responseAll;

      if (isbackAll) {
        return res;
      } else {
        return res.data;
      }
    }
  },
  (error) => {
    if (error.response?.data?.Message) {
      console.log("requestErr", error.response.data); // for debug
      ZgtToast.fail(error.response?.data?.Message);
      return Promise.reject(error.response.data)
    } else {
      return Promise.reject(error)
    }
  }
);

export default service;
